package com.coocaa.typhoon.api.third.volcengine.model.video;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.List;

/**
 * @author bijiahao
 * @date : 2025/9/28 18:10
 * @description
 */
@Data
public class VideoInfo {
    @JsonProperty("streams")
    List<Stream> streams;
    @JsonProperty("format")
    Format format;

    @Data
    public static class Format {
        @JsonProperty("nb_streams")
        int NbStreams;
        @JsonProperty("nb_programs")
        int NbPrograms;
        @JsonProperty("format_name")
        String FormatName;
        @JsonProperty("format_long_name")
        String FormatLongName;
        @JsonProperty("start_time")
        String StartTime;
        @JsonProperty("duration")
        String Duration;
        @JsonProperty("size")
        String Size;
        @JsonProperty("bit_rate")
        String BitRate;
        @JsonProperty("probe_score")
        int ProbeScore;
        @JsonProperty("tags")
        FormatTags tags;
    }

    @Data
    public static class FormatTags {
        @JsonProperty("major_brand")
        String MajorBrand;
        @JsonProperty("minor_version")
        String MinorVersion;
        @JsonProperty("compatible_brands")
        String CompatibleBrands;
        @JsonProperty("encoder")
        String Encoder;
    }

    @Data
    public static class Stream {
        @JsonProperty("index")
        int Index;
        @JsonProperty("codec_name")
        String CodecName;
        @JsonProperty("codec_long_name")
        String CodecLongName;
        @JsonProperty("profile")
        String Profile;
        @JsonProperty("codec_type")
        String CodecType;
        @JsonProperty("codec_tag_string")
        String CodecTagString;
        @JsonProperty("codec_tag")
        String CodecTag;
        @JsonProperty("width")
        int Width;
        @JsonProperty("height")
        int Height;
        @JsonProperty("coded_width")
        int CodedWidth;
        @JsonProperty("coded_height")
        int CodedHeight;
        @JsonProperty("sample_aspect_ratio")
        String SampleAspectRatio;
        @JsonProperty("display_aspect_ratio")
        String DisplayAspectRatio;
        @JsonProperty("pix_fmt")
        String PixFmt;
        @JsonProperty("level")
        int Level;
        @JsonProperty("chroma_location")
        String ChromaLocation;
        @JsonProperty("refs")
        int Refs;
        @JsonProperty("is_avc")
        String IsAvc;
        @JsonProperty("nal_length_size")
        String NalLengthSize;
        @JsonProperty("r_frame_rate")
        String RFrameRate;
        @JsonProperty("avg_frame_rate")
        String AvgFrameRate;
        @JsonProperty("time_base")
        String TimeBase;
        @JsonProperty("start_pts")
        int StartPts;
        @JsonProperty("start_time")
        String StartTime;
        @JsonProperty("duration_ts")
        int DurationTs;
        @JsonProperty("duration")
        String Duration;
        @JsonProperty("bit_rate")
        String BitRate;
        @JsonProperty("bits_per_raw_sample")
        String BitsPerRawSample;
        @JsonProperty("nb_frames")
        String NbFrames;
        @JsonProperty("extradata_size")
        int ExtradataSize;
        @JsonProperty("disposition")
        Disposition disposition;
        @JsonProperty("tags")
        Tags tags;
        @JsonProperty("sample_fmt")
        String SampleFmt;
        @JsonProperty("sample_rate")
        String SampleRate;
        @JsonProperty("channels")
        int Channels;
        @JsonProperty("channel_layout")
        String ChannelLayout;
    }

    @Data
    public static class Disposition {
        @JsonProperty("default")
        int Default;
        @JsonProperty("dub")
        int Dub;
        @JsonProperty("original")
        int Original;
        @JsonProperty("comment")
        int Comment;
        @JsonProperty("lyrics")
        int Lyrics;
        @JsonProperty("karaoke")
        int Karaoke;
        @JsonProperty("forced")
        int Forced;
        @JsonProperty("hearing_impaired")
        int HearingImpaired;
        @JsonProperty("visual_impaired")
        int VisualImpaired;
        @JsonProperty("clean_effects")
        int CleanEffects;
        @JsonProperty("attached_pic")
        int AttachedPic;
        @JsonProperty("timed_thumbnails")
        int TimedThumbnails;
        @JsonProperty("captions")
        int Captions;
        @JsonProperty("descriptions")
        int Descriptions;
        @JsonProperty("metadata")
        int Metadata;
        @JsonProperty("dependent")
        int Dependent;
        @JsonProperty("still_image")
        int StillImage;
    }

    @Data
    public static class Tags {
        @JsonProperty("language")
        String Language;
        @JsonProperty("handler_name")
        String HandlerName;
        @JsonProperty("vendor_id")
        String VendorId;
    }
}
